package com.example.learnspringboot.exception;

import com.example.learnspringboot.common.Result;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 功能:全局异常处理
 * 作者:每天都要敲代码
 * 日期:2023/11/23 15:07
 *  ControllerAdvice： controller增强器，给controller控制器添加统一的操作或者处理，
 *  比较熟知的用法是结合@ExceptionHandler用于全局异常的处理
 *  1.结合方法型注解@ExceptionHandler，用于捕获Controller中抛出的指定类型的异常，从而达到不同类型的异常区别处理的目的。
 * ExceptionHandler的作用主要在于声明一个或多个类型的异常，当符合条件的Controller抛出这些异常之后将会对这些异常进行捕获，
 * 然后按照其标注的方法的逻辑进行处理，从而改变返回的视图信息。
 *
 * 2.结合方法型注解@InitBinder，用于request中自定义参数解析方式进行注册，从而达到自定义指定格式参数的目的。
 *
 * 3.结合方法型注解@ModelAttribute，表示其注解的方法将会在目标Controller方法执行之前执行。
 */
@ControllerAdvice
public class GlobalException {

    @ExceptionHandler(ServiceException.class)
    @ResponseBody
    public Result serviceException(ServiceException e) {
        return Result.error(e.getCode(),e.getMessage());
    }
 }
